/**
  * @File    :   ap3216c.h
  * @Time    :   2020/04/05 15:42:05
  * @Author  :   huenrong
  */

#ifndef __AP3216C_H
#define __AP3216C_H

#include "../i2c/i2c.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>

#define AP3216C_I2C_ADDR 0x1E // AP3216C器件地址

// AP3316C寄存器
#define AP3216C_SYSTEM_CONFIG 0x00 // 配置寄存器
#define AP3216C_INT_STATUS 0x01    // 中断状态寄存器
#define AP3216C_INT_CLEAR 0x02     // 中断清除寄存器
#define AP3216C_IR_DATA_LOW 0x0A   // IR数据低字节
#define AP3216C_IR_DATA_HIGH 0x0B  // IR数据高字节
#define AP3216C_ALS_DATA_LOW 0x0C  // ALS数据低字节
#define AP3216C_ALS_DATA_HIGH 0x0D // ALS数据高字节
#define AP3216C_PS_DATA_LOW 0x0E   // PS数据低字节
#define AP3216C_PS_DATA_HIGH 0x0F  // PS数据高字节

// ap3216c模式
#define POWER_DOWN 0x00                // 关闭电源
#define ALS_FUNCTION_ACTIVE 0x01       // 激活ALS模式
#define PS_IR_FUNCTION_ACTIVE 0x02     // 激活PS, IR模式
#define ALS_PS_IR_FUNCTION_ACTIVE 0x03 // 激活ALS, PS, IR模式
#define SW_RESET 0x04                  // 复位
#define ALS_FUNCTION_ONCE 0x05         // ALS模式单次采集
#define PS_IR_FUNCTION_ONCE 0x06       // PS, IR模式单次采集
#define ALS_PS_IR_FUNCTION_ONCE 0x07   // ALS, PS, IR模式单次采集

/**
  * @name   ap3216c_init
  * @brief  ap3216c初始化
  * @param  fd: 设备文件描述符
  * @retval 成功: 返回0
            失败: 返回-1
  */
int ap3216c_init(const int fd);

/**
  * @name   ap3216c_read_als
  * @brief  ap3216c读取als数据
  * @param  read_als_data: 读取到的als数据
  * @retval 成功: 0
  *         失败: -1
  */
int ap3216c_read_data(uint16_t *read_ir_data, uint16_t *read_als_data,
                      uint16_t *read_ps_data, const int fd);

#endif
